Skip to content

feat(releases): surface the branch a snapshot came from, and filter by it - #7

Merged
haksungjang merged 2 commits into
mainfrom
feat/surface-branch-on-reads
Aug 4, 2026
Merged

feat(releases): surface the branch a snapshot came from, and filter by it#7
haksungjang merged 2 commits into
mainfrom
feat/surface-branch-on-reads

Conversation

@haksungjang

Copy link
Copy Markdown
Contributor

Scan.ref has been stamped at scan-create for a while — normalized, indexed, and used by retention — but no read path exposed it. No response field, no filter, nothing in the UI. A project scanning main, release/1.x and PR branches showed one interleaved list of snapshots with no way to tell which row came from where, let alone narrow to one branch.

ReleaseSnapshot now carries ref, the Releases table gains a Branch column, and both GET /projects/{id}/releases and GET /projects/{id}/scans take ?ref=. Bare branches and fully-qualified refs both work — the endpoints normalize through the same normalize_ref the scan-create path uses, so a branch reaches its own rows either way, and the filter is applied to the count so a filtered page does not report the unfiltered total.

The two lists stay distinct on purpose: releases covers succeeded scans, so it is a branch's usable history, while the scans list covers every status and is where a branch's failed attempts remain visible.

An ad-hoc scan carries no ref, and the cell says so rather than rendering blank — blank reads as missing data when it is actually a real state.

Second of three follow-ups after #6 fixed the ref-blind anchor. The remaining one is accepting ?release= as an anchor on the detail endpoints.

…y it

Scan.ref was stamped at scan-create and then invisible: no response field,
no filter, nothing in the UI. A project scanning several branches showed
one interleaved list with no way to tell the rows apart or narrow to one.

ReleaseSnapshot now carries ref, the Releases table has a Branch column,
and both the releases and project-scans lists take ?ref= (bare or
fully-qualified, normalized like scan triggers). Releases covers succeeded
scans only; the scans list keeps a branch's failed attempts visible.
Five test factories construct the wire type literally, so adding a required
field breaks them. Local `tsc --noEmit` misses this — the CI typecheck runs
`tsc -b`, which builds the test project too.
@haksungjang
haksungjang merged commit 7668713 into main Aug 4, 2026
24 checks passed
@haksungjang
haksungjang deleted the feat/surface-branch-on-reads branch August 4, 2026 07:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant